1 typeof的使用;这是一个运算符,不是方法
1.1检测数据类型,返回的结果是一个字符串类型。有六种可能:number boolean string object function undefined
注意typeof(null) 返回的是 : object
typeof 运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String
1.1.1 在ES6 之前,typeof可以随心所欲的时候,基本上不会报错
|
|
|
|
1.1.2 但是在ES6 之后引入了let和const之后 typeof 就需要掂量一下自己咯,let声明的变量,在所声明的作用域中,必须在使用之前进行声明 ,其实这是一个好的趋势,可以形成严谨良好的编程习惯;
|
|
|
|
1.2 typeof 可以用于被声明 或者未被声明 的变量;但是未被声明 的变量不能用其他运算符运算,之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。
|
|
1.3 对于基本数据类型(Number Boolean String null undefined) 以及引用类型 object的typeof值
1.3.1类 : Object Function Array String Boolean Number Date ;这些未初始化为实例的类的typeof类型为function
|
|
1.3.2 对象的创建方式是用关键字 new 后面跟上实例化的类的名字,当将一个函数通过new实例化之后,那么就创建了一个对象
|
|
1.3.3 基本数据类型的typeof的值
|
|
1.3.5 通过上面分析我们发现typeof可以判断基本数据类型,但是对于复杂数据类型,返回都是object,那么如何检测object的”类”呢?也就是说,如何检测一个对象是由哪个构造函数创建的呢?
这个时候就要用到 instanceof 了;语法: obj instanceof Type ,会沿着对象的原型链一层层的找,如果找到由Type类型的构造函数,则返回true,否则返回false;
|
|
1.3.6 或者可以直接调用Object.prototype.toString.call(obj) 来判断obj到底是哪个类型的内置对象
|
|
2 null undefined 这两个原始数据类型没有属性和方法
2.1 null是一个表示”无”的对象(null 则用于表示尚未存在的对象),转化为数值的时候值为0;典型的用法是:
- 用来初始化一个变量,该变量将来可能会被赋值成一个对象
- 用来和一个已经初始化的对象进行比较,这个变量可以是一个对象,也可以不是一个对象
- 当函数的参数期望是对象时,被用作参数传入
- 当函数返回值期望是对象时,被当做返回值输出(比如调用API 获取页面元素)
- 调用API获取页面中的元素,获取不到的时候,返回undefined;
- 删除事件绑定,事件本身是一个 null ,是一个空的对象,可以添加
- 作为对象原型链的终点
- 正则exec()方法如果未找到匹配,则返回值为 null。
- 字符串 str.match(value) 方法匹配字符串,如果匹配不到,返回null
|
|
2.2 undefined 是一个表示”无”的原始值,转化为数值的时候值为0 ;为布尔类型的时候使false ; 典型用法是:
- 变量被声明了,但是没有赋值,那么该变量的值就是undefined
- 调用一个函数的时候,如果应该提供的参数没有提供,那么该参数默认是undefined
- 如果一个对象的属性没有赋值,那么该属性值为undefined
- 获取某个对象的属性,该对象本身就没有该属性,返回undefined(数组也是对象)
- 函数没有返回值的时候,默认返回undefined;
- 函数的实参少于形参个数,未被赋值的形参默认值为undefined
- 使用shift pop 删除数组中的第一个和最后一个元素的时候,如果数组为空,那么返回值是undefined
|
|
2.3 乱入一个空字符串作为返回值以及NaN作为返回值的情况总结吧
- str.chatAt(index) 如果index不再0和str.length那么返回一个空字符;
- 如果期望转化的结果为数字的时候,转化失败的时候,返回NaN
2.4如何区分二者?
- == 运算符只比较值,不进行类型的比较,比较之前会进行隐式转化,null==undefined 返回true.
- === 区分两者,不仅仅比较内容,还比较数据类型 null===undefined false
如何判断一个变量是null还是undefined?
- 如何确定一个变量是undefined;
|
|
以下附上 == 运算符的W3C解释,方便读者回忆基础
|
|
我觉得可以进行再简化,来进行解释这个比较过程:
|
|
- 如何确定一个变量是null
|
|